package com.lancoo.ccas53.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lancoo.ccas53.entity.MajorGrade;
import com.lancoo.ccas53.pojo.vo.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Optional;

/**
 * <p>
 * 年级专业 服务类
 * </p>
 *
 * @author quin.song
 * @since 2024-05-20
 */
public interface MajorGradeService extends IService<MajorGrade> {

    /**
     * 同步专业年级 学院
     *
     * @param taskId
     * @param schoolId
     */
    void syncMajorGrade(Integer taskId, String schoolId);

    /**
     * 获取专业
     *
     * @param taskId
     * @param baseCollegeId
     * @return
     */
    List<MajorVo> getMajor(Integer taskId, String baseCollegeId);

    /**
     * 获取年级
     *
     * @param taskId
     * @param baseCollegeId
     * @return
     */
    List<GradeVo> getGrade(Integer taskId, String baseCollegeId);

    /**
     * 年级专业树
     *
     * @param taskId
     * @return
     */
    List<CollegeTree> getMajorGradeTree(Integer taskId, String keyword, Integer studyNature);

    /**
     * 批量修改学生信息设置
     *
     * @param majorGradeInput
     * @return
     */
    Boolean setMajorGrade(MajorGradeInput majorGradeInput);

    /**
     * 清空学生信息设置
     *
     * @param taskId
     * @return
     */
    Boolean clearMajorGrade(Integer taskId);

    void exportStudentInformationSettings(HttpServletResponse response, Integer taskId, Integer campusId, String baseCollegeId, String baseMajorId, String gradeId, String keyword, Integer isCampusCross, Integer currentPage, Integer pageSize);

    void exportTeacherInformationSettings(HttpServletResponse response, Integer taskId, Integer campusId, String baseCollegeId, Integer identity, Integer isCampusCross, String keyword, Long courseId, Integer currentPage, Integer pageSize);


    void exportSetThePreSelectedCourseRotation(HttpServletResponse response, Integer taskId, Optional<Integer> type);


    void exportThePreselectionResult(HttpServletResponse response, Integer taskId, String collegeName, String courseName1, String courseType, String courseNatureName, String selectStudentNums, String state, String isCourseState, String baseCollegeId, String courseTypeId, Optional<Integer> courseNature, String keyword, Optional<Integer> isEnable, Optional<Integer> isAchieveOpen, Integer pageSize, Integer currentPage);

    void exportPreSelectedCourseLogs(HttpServletResponse response, Integer taskId, Long roundId, String baseCollegeId, String gradeId, String classId, Long courseId, String startDateTime, String endDateTime, String keyword, Integer pageSize, Integer currentPage);

    void importStudentInformationSettings(HttpServletResponse response, Integer taskId, Integer flag, MultipartFile file);

    void importOfTheStartPlan(HttpServletResponse response, Integer taskId, Integer flag, MultipartFile file);

    void exportProhibitedFromDischarging(HttpServletResponse response, Integer taskId, Integer campusId, Integer buildingId, Integer floor, Integer roomType, String keyword, Integer dataRange, Integer currentPage, Integer pageSize);

    void importSiteExclusion(HttpServletResponse response, Integer taskId, Integer flag, MultipartFile file);

    void exportAssignedPriorityOfTeachers(HttpServletResponse response, Integer taskId, String baseCollageId, String keyword, Integer dataRange, Integer currentPage, Integer pageSize);

    void importAssignedPriorityOfTeachers(HttpServletResponse response, Integer taskId, Integer flag, MultipartFile file);

    void exportForbiddenOfCourse(HttpServletResponse response, Integer taskId, String baseCollageId, String keyword, String courseTypeId, Integer courseNature, Integer dataRange, Integer currentPage, Integer pageSize);

    void importForbiddenOfCourse(HttpServletResponse response, Integer taskId, Integer flag, MultipartFile file);

    void exportSetCourseSelection(HttpServletResponse response, Integer taskId, Optional<Integer> type);


    void exportOfStudent(HttpServletResponse response, Integer taskId, String courseName, String collegeName, String courseName1, String courseType, String courseNatureName, String selectStudentNums, String state, String isCourseState, String baseCollegeId, String courseTypeId, Optional<Integer> courseNature, String keyword, Optional<Integer> isEnable, Optional<Integer> isAchieveOpen, Integer pageSize, Integer currentPage);

    void exportSelectLog(HttpServletResponse response, Integer taskId, Long roundId, String baseCollegeId, String gradeId, String classId, Integer courseId, String startDateTime, String endDateTime, String keyword, Integer pageSize, Integer currentPage);

    void importTeachingClassDifferentLevels(HttpServletResponse response, Integer taskId, Integer flag, MultipartFile file, String baseCollegeId, String baseCourseId);

    void exportOfClass(HttpServletResponse response, String collegeName, String majorName, String gradeName, String campusName, String teacherName, Integer taskId, Integer flag, Integer campusId, String baseCollegeId, String gradeId, String baseMajorId, String keyword, Long teacherId);

    void exportOfTeachingGroup(HttpServletResponse response, String collegeName, Integer taskId, String baseCollegeId, String keyword);

    void exportOfTheStartPlan(HttpServletResponse response, Integer taskId, String collegeName, String gradeName, String majorName, String courseTypeName, String courseNatureName, String stateName, CourseVo param);


    void exportConfirmByClass(HttpServletResponse response, String cssRoundName, String collegeName, String courseTypeName, String courseNature, String courseName, String baseCollegeId, Long courseId, Integer flag, String keyword, Integer pageSize, Integer currentPage, Integer taskId, Integer roundId);

    void exportConfirmByStudent(HttpServletResponse response, String cssRoundName, String collegeName, String courseTypeName, String courseNature, String courseName, String baseCollegeId, String gradeId, String classId, String keyword, Integer flag, Integer pageSize, Integer currentPage, Integer taskId, Integer needToSelect, Integer roundId);


    void exportCourseRule(HttpServletResponse response, Integer taskId, Integer dataRange, String baseCollegeId, String courseTypeId, Integer courseNature, Integer flag, String keyword, Integer parameterSet, Integer currentPage, Integer pageSize);

    void importCourseRule(HttpServletResponse response, Integer taskId, Integer flag, MultipartFile file);


    void exportSubClass(HttpServletResponse response, Integer taskId, String keyword, Integer currentPage, Integer pageSize);

    void importSubClass(HttpServletResponse response, Integer taskId, Integer flag, MultipartFile file);

    void exportTeachingClassCourse(HttpServletResponse response, Integer taskId, Long courseId);

}
